package com.sskj.api.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.sskj.api.domain.Permission;
import com.sskj.api.domain.SysUser;
import com.sskj.api.vo.req.AdminUserAddReq;
import com.sskj.api.vo.req.SysUserPageListReq;
import com.sskj.common.dto.TreeNode;

import java.util.List;

public interface ISysUserService extends IService<SysUser> {

    /**
     * 账号登录
     * @param phone 手机号
     * @param password 密码
     * @return 返回用户实例
     */
    SysUser accountLogin(String phone, String password);

    /**
     * 通过手机号获取用户信息
     * @param phone 手机号
     * @return 用户实例
     */
    SysUser getByPhone(String phone);

    /**
     * 获取用户信息
     * @param id 用户ID
     * @return 用户实例
     */
    SysUser info(Long id);

    /**
     * 分页查询
     * @param req 请求参数
     * @return 分页实例
     */
    IPage<SysUser> pageList(SysUserPageListReq req);

    /**
     * 新增管理用户
     * @param req 请求参数
     */
    void add(AdminUserAddReq req);

    /**
     * 通过部门ID获取用户数
     * @param departmentId 部门ID
     * @return 统计数量
     */
    Long countByDepartmentId(Long departmentId);

    /**
     * 通过岗位ID获取用户树
     * @param positionId 岗位ID
     * @return 统计数
     */
    Long countByPositionId(Long positionId);

    /**
     * 获取用户菜单
     * @param id 用户ID
     * @return 列表
     */
    List<TreeNode<Permission>> getMenus(Long id);

    /**
     * 获取用户操作权限
     * @param id 用户ID
     * @return 列表
     */
    List<Permission> getActionPermission(Long id);

    /**
     * 重置密码
     * @param userId 用户ID
     */
    void resetPassword(Long userId);

    /**
     * 修改密码
     * @param userId 用户ID
     * @param oldPassword 旧密码
     * @param newPassword 新密码
     */
    Boolean modifyPassword(Long userId, String oldPassword, String newPassword);
}
